﻿using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;
using Polenter.Serialization;
using System.Threading;
//using Model.ColaPrioridad;


namespace Model
{
    public class CentroMedico
    {
        public List<Paciente> pacientes { get; set; }
        public ColaPrioridad urgencias{get; set; }

        SharpSerializer mySerializer = new SharpSerializer();

        public CentroMedico()
        {
            pacientes = new List<Paciente>();
            urgencias = new ColaPrioridad();
        }

        public bool agregarPaciente(Paciente p)
        {


            if (buscarPaciente(p.Cedula) != null)
            {
                return false;
            }

            pacientes.Add(p);

           /* XmlSerializer serializer = new XmlSerializer(typeof(List<Paciente>));
            FileStream fs = new FileStream("centro.xml", FileMode.Create);
            serializer.Serialize(fs, pacientes);
            fs.Close();*/

            //serialize
             
            mySerializer.Serialize(pacientes, "pacientes.xml");

            return true;
        }
        public Paciente buscarPaciente(string cc)
            
        {
            //deserialize
            List<Paciente> pacienteDeserialize = new List<Paciente>();
            SharpSerializer mySerializer = new SharpSerializer();            
            try{
           pacienteDeserialize = (List<Paciente>) mySerializer.Deserialize("pacientes.xml");
            }catch(Exception e){}
           foreach (Paciente x in pacienteDeserialize)
            {
                if (x.Cedula.Equals(cc))
                {
                    return x;
                }
            }

            return null;
        }

        //USANDO COLAS DE PRIORIDAD
        public void agregarUrgencia(Paciente P)
        {  
           urgencias.encolar(P.historial.NivelTriage,P);

           //guardar los pacientes que ingresen a urgencias en un archivo xml

           
           mySerializer.Serialize(urgencias, "urgencias.xml");
        }

        public void crearHistorial(Historial h, Paciente p)
        {
            p.historial = h;
        }

        //se va a tomar la lista de las urgencias que ya fueron atendidas, suponiendo que en el orden que está fue el orden de llegada
        //es obvio que no fue así porque el que está de primero pudo haber sido nivel 1 pero llegar después de muchos otros pacientes
        public int simular(Configuracion c)
        {
            ColaPrioridad urgenciasDeserializada = (ColaPrioridad) mySerializer.Deserialize("urgencias.xml");
            Hilos h = new Hilos(c, urgenciasDeserializada);
            Thread t = new Thread(new ThreadStart(h.simular));
            t.Start();

            return 0;
        }
    }
}
